The term software architecture denotes the high-level structure of a software system. It can be defined as the set of structures needed to reason about the software system, which comprise software elements, the relations between them, and the properties of both elements and relations.